#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "file_path.h"

#include "dirs_list.h"

sDL *DL_create(char **dirs, unsigned int numdirs) {
    sDL *dl=(sDL *)calloc(1, sizeof(sDL));
    if(!dl) return NULL;

    if(DL_init(dl, dirs, numdirs)) {
        free(dl);
        return NULL;
    }

    return dl;
}

int DL_init(sDL *dl, char **dirs, unsigned int numdirs) {
    if(!dl || dl->dirs || dl->numdirs || !dirs || !numdirs) return 1;

    dl->numdirs=numdirs;
    dl->dirs=(char **)calloc(numdirs, sizeof(char*));
    if(!dl->dirs) return 1;

    unsigned int i;
    for(i=0; i<dl->numdirs; i++) {
        dl->dirs[i]=FP_to_absolute_a(dirs[i]);
        if(!dl->dirs[i]) {
            DL_deinit(dl);
            return 1;
        }
    }

    return 0;
}

int DL_copy(sDL *src, sDL *dst) {
    if(!src || !dst) return 1;

    return DL_init(dst, src->dirs, src->numdirs);
}

void DL_deinit(sDL *dl) {
    if(!dl) return;

    if(dl->dirs) {
        unsigned int i;
        for(i=0; i<dl->numdirs; i++) {
            if(dl->dirs[i]) free(dl->dirs[i]);
        }
        free(dl->dirs);
    }

    bzero(dl, sizeof(sDL));
}

void DL_free(sDL *dl) {
    if(!dl) return;

    DL_deinit(dl);

    free(dl);
}

